package 简单.其他;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 给你一个长度为 n 的整数数组 score ，其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。
 * <p>
 * 运动员将根据得分 决定名次 ，其中名次第 1 的运动员得分最高，名次第 2 的运动员得分第 2 高，依此类推。运动员的名次决定了他们的获奖情况：
 * <p>
 * 名次第 1 的运动员获金牌 "Gold Medal" 。
 * 名次第 2 的运动员获银牌 "Silver Medal" 。
 * 名次第 3 的运动员获铜牌 "Bronze Medal" 。
 * 从名次第 4 到第 n 的运动员，只能获得他们的名次编号（即，名次第 x 的运动员获得编号 "x"）。
 * 使用长度为 n 的数组 answer 返回获奖，其中 answer[i] 是第 i 位运动员的获奖情况。
 * <p>
 *  
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/relative-ranks
 */
public class 相对名次_506 {

    public static void main(String[] args) {

        int[] score = {5, 4, 3, 2, 1};
        System.out.println(Arrays.toString(findRelativeRanks(score)));

    }

    /**
     * @param score
     * @return
     */
    public static String[] findRelativeRanks(int[] score) {
        String[] strings = new String[score.length];
        //运动员-分数
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < score.length; i++) {
            map.put(i, score[i]);
        }
        Arrays.sort(score);  //默认升序排序
        //分数-排名
        Map<Integer, String> sortMap = new HashMap<>();
        for (int i = score.length - 1; i >= 0; i--) {
            int curSort = score.length - i;
            if (curSort == 1) {
                sortMap.put(score[i], "Gold Medal");  //第一名
            } else if (curSort == 2) {
                sortMap.put(score[i], "Silver Medal");  //第二名
            } else if (curSort == 3) {
                sortMap.put(score[i], "Bronze Medal");  //第三名
            } else {
                sortMap.put(score[i], String.valueOf(score.length - i));
            }
        }
        for (int i = 0; i < strings.length; i++) {
            strings[i] = sortMap.get(map.get(i));
        }
        return strings;
    }

}
